#ifndef ENTITY_H
#define ENTITY_H

#include <defs/export.h>
#include <defs/global.h>

#include <QUuid>

namespace Opl
{
    namespace Core
    {


        /*!
          Class represent base data, object or any other element in module eg Gui elements, Contacts etc.
          */
        O_PRIVATE_DECLARE(Entity);
        class CORE_EXPORT Entity
        {

            public:
                Entity();
                virtual ~Entity();

                typedef uint EntityId;

                /*!
                  Unique Id for current application instance
                  */
                const EntityId& unique()const;

                /*!
                  Create DateTime
                  */
                const QDateTime& stamp()const;

                /*!
                  Retrieve custom data
                  */
                const QVariant& tag()const;

                /*!
                  set user custom data
                  */
                void setTag(const QVariant& data);

                /*!
                  string representation this object
                  */
                virtual QString toString();
            private:
                O_PRIVATE_DECLARE_MEMBER(Entity)
        };
    };
};

#endif // ENTITY_H

